package com.weaver.drools.dao.common;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.NoRepositoryBean;
import com.weaver.drools.common.utils.PageTag;
import java.io.Serializable;
import java.sql.Connection;
import java.util.List;
/**
 * 
 *  @application name: 
 *  @author: zhouxinlei 
 *  @time：2018年6月27日
 *  @version：ver 1.1
 */
@NoRepositoryBean
public interface CommonBaseDao<T,ID extends Serializable> extends JpaRepository<T,ID>{
	
	/**
	 * sql 返回实体对象
	 * @param sql
	 * @param cls
	 * @return
	 */
	public List<T> listBySQL(String sql, Class<T> cls);
	/**
	 * sql 返回字符串，单个字段
	 * @param sql
	 * @return
	 */
	public String StringBySQL(String sql);
	/**
	 * sql查询返回map类型的list
	 * @param sql
	 * @return
	 */
	public List<?> findListBySql(String sql);
	/**
	 * sql 返回字符串，单个字段
	 * @param sql
	 * @return
	 */
	public Long findIdBySQL(String sql);
	
	/**
	 * 执行ql语句，封装自定义 分页page
	 * @param page
	 * @param hql qlString 基于jpa标准的ql语句
	 * @param countHql 额外查询获取总记录数，使用默认则填null
	 * @return
	 */
	public PageTag<T> findPage(int currentNum,String hql,String countHql);
	
	
	/**
	 * list 查询
	 * @param hql
	 * @return
	 */
	public List<T> findListByhql(String hql);
	
	/**
	 * dto 查询
	 * @param hql
	 * @return
	 */
	public T findEntity(String hql);
	
	
	public T saveOrUpdate(T entity);
	
	public Connection getConnection() throws Exception;
}
